package relatorio.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRPdfExporter;


public class ReportUtils {
	 /**
	     * Gera o relatorio em PDF.
	     * @param inputStream InputStream que contem o relatorio.
	     * @param parametros Parametros utilizados pelo relatorio.
	     * @param conexao Conexao utilizada para a execucao da query.
	     * @param response HttpServletResponse que sera usado como base para
	     * gerar o relatorio.
	     * @return O OutputStream do HttpServletResponse passado.
	     * @throws JRException Caso ocorra algum problema na geracao do relat�rio.
	     * @throws IOException Caso ocorra algum problema na obtencao do
	     * OutputStream.
	  */
	
	public static OutputStream createPDFReport(InputStream inputStream,Map<String, Object> parametros,
	            Connection conexao, HttpServletResponse response ) throws JRException, IOException {
		// configura o content type do response
	    response.setContentType( "application/pdf" );
	    // obtem o OutputStream para escrever o relatorio
	    OutputStream out = response.getOutputStream();
	    /*
	       * Cria um JasperPrint, que eh a versao preenchida do relatorio,
	       * usando uma conexao.
	    */
	    JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream, parametros, conexao );
	    // Exporta em PDF, escrevendo os dados no output stream do response.
	    JRExporter exporter = new JRPdfExporter();
	    exporter.setParameter( JRExporterParameter.JASPER_PRINT,jasperPrint );
        exporter.setParameter( JRExporterParameter.OUTPUT_STREAM,out);
        // gera o relatorio
        exporter.exportReport();
        // retorna o OutputStream
        return out;
	}

	
	
}
